package org.zizi.util;

import java.util.ArrayList;
import java.util.List;

public class SqlBuilder
{
	private StringBuilder sql;
	private List<Object> parameters;
	
	public SqlBuilder()
	{
		sql = new StringBuilder();
		parameters = new ArrayList<Object>();
	}
	
	public SqlBuilder(String sql, Object... parameters)
	{
		this();
		append(sql, parameters);
	}
	
	/**
	 * 添加SQL片段，并加入相应的参数
	 * @param sql
	 * @param parameters
	 */
	public SqlBuilder append(String sql, Object... parameters)
	{
		this.sql.append(sql);
		for (Object o : parameters) this.parameters.add(o);
		
		return this;
	}
	
	/**
	 * 将另一个SqlBuilder中的SQL片段和参数加入到this当中
	 * @param sql
	 * @param parameters
	 */
	public SqlBuilder append(SqlBuilder sb)
	{
		this.sql.append(sb.sql);
		this.parameters.addAll(sb.parameters);
		
		return this;
	}
	
	/**
	 * 添加SQL片段，并加入相应的参数
	 * @param intelligent 是否智能处理加入 and 连接
	 * @param sql
	 * @param parameter
	 * @return
	 */
	public SqlBuilder append(boolean intelligent, String sql, Object... parameter)
	{
		String flag = (intelligent && this.sql.length() == 0) ? "" : " and ";
		append(flag + sql, parameter);
		
		return this;
	}

	public String getSql()
	{
		return sql.toString();
	}

	public Object[] getParameters()
	{
		return parameters.toArray();
	}
}